/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.catosist.run.business.gestorgasto;

import com.catosist.run.dataaccess.domain.GastoDao;
import com.catosist.run.dataaccess.model.GastoVO;
import com.catosist.run.dataaccess.model.ViajeVO;
import com.catosist.run.services.GastoDTO;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;

/**
 *
 * @author Bicho
 */
public class GestorGastoImpl implements GestorGasto {

    @Override
    public List<GastoDTO> getAll() {
        List<GastoVO> gastoVOs = gastoDao.getAll();
        List<GastoDTO> gastoDTOs = new LinkedList<GastoDTO>();
        for (Iterator<GastoVO> it = gastoVOs.iterator(); it.hasNext();) {
            GastoVO gastoVO = it.next();
            gastoDTOs.add(new GastoDTO(
                    gastoVO.getId(),
                    gastoVO.getFingreso(),
                    gastoVO.getCantidad(),
                    gastoVO.getDescripcion(),
                    gastoVO.getPrecio(),
                    gastoVO.getTotal(),
                    gastoVO.getNumcomprobate(),
                    gastoVO.getTipo(),
                    gastoVO.getEmpresa()));

        }
        return gastoDTOs;
    }

    public List<GastoDTO> getByViajeId(int viajeId) {
        List<GastoVO> gastoVOs = gastoDao.getByViajeId(viajeId);
        List<GastoDTO> gastoDTOs = new LinkedList<GastoDTO>();
        for (Iterator<GastoVO> it = gastoVOs.iterator(); it.hasNext();) {
            GastoVO gastoVO = it.next();
            gastoDTOs.add(new GastoDTO(
                    gastoVO.getId(),
                    gastoVO.getFingreso(),
                    gastoVO.getCantidad(),
                    gastoVO.getDescripcion(),
                    gastoVO.getPrecio(),
                    gastoVO.getTotal(),
                    gastoVO.getNumcomprobate(),
                    gastoVO.getTipo(),
                    gastoVO.getEmpresa()));

        }
        return gastoDTOs;
    }

//    @Override
//    public GastoDTO get(int indice) {
//        GastoVO gastoVO = getVOatIndex(indice);
//        return new GastoDTO(gastoVO.getId().getId(), "descirpcion",
//                new Date(), gastoVO.getCantidad(),
//                gastoVO.getDescripcion(),
//                gastoVO.getPrecio(),
//                gastoVO.getTotal(),
//                gastoVO.getNumcomprobate());
//    }
//    @Override
//    public GastoVO getVOatIndex(int indice) {
//        return gastoVOs.get(indice);
//    }
//
//    @Override
//    public GastoDao getGastoDao(){
//        return  this.gastoDao;
//    }
//    @Override
    public void setGastoDao(GastoDao gastoDao) {
        this.gastoDao = gastoDao;
    }
    private GastoDao gastoDao;
//    private List<GastoVO> gastoVOs;

    @Override
//    public void saveOrUpdate(GastoDTO gastoDTO, int viajeId, int descripcionId) {
    public void saveOrUpdate(GastoDTO gastoDTO) {

        GastoVO gastoVO = new GastoVO();
        if (gastoDTO.getId() != 0) {
            gastoVO.setId(gastoDTO.getId());
        }

        gastoVO.setFingreso(gastoDTO.getFingreso());
        gastoVO.setCantidad(gastoDTO.getCantidad());
        gastoVO.setDescripcion(gastoDTO.getDescripcion());
        gastoVO.setPrecio(gastoDTO.getPrecio());
        gastoVO.setTotal(gastoDTO.getTotal());
        gastoVO.setNumcomprobate(gastoDTO.getNumcomprobate());
        gastoVO.setTipo(gastoDTO.getTipo());
        gastoVO.setEmpresa(gastoDTO.getEmpresa());

        if (gastoDTO.getViaje() != 0) {
            ViajeVO viajeVO = new ViajeVO();
            viajeVO.setId(gastoDTO.getViaje());
            System.out.println("id de viaje "  +gastoDTO.getViaje()+","+viajeVO.getId());
            gastoVO.setViaje(viajeVO);
        }
        
        gastoDao.saveOrUpdate(gastoVO);
    }

    public Object getByIndex(int indice) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public GastoDTO getById(int voId) {
//        GastoIdVO gastoIdVO = new GastoIdVO(voId, viajeId);
        GastoVO gastoVO = gastoDao.get(voId);
        GastoDTO gastoDTO = new GastoDTO();

        gastoDTO.setCantidad(gastoVO.getCantidad());
        gastoDTO.setDescripcion(gastoVO.getDescripcion());
        gastoDTO.setFingreso(gastoVO.getFingreso());
        gastoDTO.setId(gastoVO.getId());
        gastoDTO.setNumcomprobate(gastoVO.getNumcomprobate());
        gastoDTO.setPrecio(gastoVO.getPrecio());
        gastoDTO.setTotal(gastoVO.getTotal());
        gastoDTO.setEmpresa(gastoVO.getEmpresa());
        gastoDTO.setTipo(gastoVO.getTipo());
        if (gastoVO.getViaje() != null) {
            gastoDTO.setViaje(gastoVO.getViaje().getId());
        }
        else
            gastoDTO.setViaje(0);
        
        return gastoDTO;
    }

    public int getIdAtIndex(int indice) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public int getIndexOf(int voId) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void saveOrUpdate(Object o) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void deleteById(int gastoId) {
        gastoDao.deleteById(gastoId);
    }


    public void deleteByIndex(int index) {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public void updateListVo() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public List<GastoDTO> getAllByDescription() {
        List<GastoVO> gastoVOs = gastoDao.getAllGroupByDescription();
        List<GastoDTO> gastoDTOs = new LinkedList<GastoDTO>();
        for (Iterator<GastoVO> it = gastoVOs.iterator(); it.hasNext();) {
            GastoVO gastoVO = it.next();
            gastoDTOs.add(new GastoDTO(
                    gastoVO.getId(),
                    gastoVO.getFingreso(),
                    gastoVO.getCantidad(),
                    gastoVO.getDescripcion(),
                    gastoVO.getPrecio(),
                    gastoVO.getTotal(),
                    gastoVO.getNumcomprobate(),
                    gastoVO.getTipo(),
                    gastoVO.getEmpresa()));

        }
        return gastoDTOs;
    }

    public List<GastoDTO> getAllByTipo(int tipo) {
        List<GastoVO> gastoVOs = null;

        switch(tipo){
            case 0:
                gastoVOs = gastoDao.getAll();
                break;
            case 1:
                gastoVOs = gastoDao.getAllFacturas();
                break;
            case 2:
                gastoVOs = gastoDao.getAllBoletas();
                break;
            case 3:
                gastoVOs = gastoDao.getAllOtros();
                break;
        }

        List<GastoDTO> gastoDTOs = new LinkedList<GastoDTO>();
        for (Iterator<GastoVO> it = gastoVOs.iterator(); it.hasNext();) {
            GastoVO gastoVO = it.next();
            gastoDTOs.add(new GastoDTO(
                    gastoVO.getId(),
                    gastoVO.getFingreso(),
                    gastoVO.getCantidad(),
                    gastoVO.getDescripcion(),
                    gastoVO.getPrecio(),
                    gastoVO.getTotal(),
                    gastoVO.getNumcomprobate(),
                    gastoVO.getTipo(),
                    gastoVO.getEmpresa()));
        }
        return gastoDTOs;
    }
    
    public List<Object> reporteCompras() {
        List<Object> resultadoCompras = gastoDao.reporteCompras();
        return resultadoCompras;
    }
}
